<?php

$this->useClass("Handler_Community");
class Action_Community_RssImportOPML extends Handler_Community
{
	private $lib_rss;

	public function init() {
		parent::init();
		$this->rh->UseClass("RL_URLGenerator");
		$this->rh->UseClass("RSSAggregator_RssLibWrapper");
		$this->lib_rss = new RssLibWrapper();

		$this->model = $this->ctx->mm->getModel("RssFeedList", "m");
		$this->model->setCommunityOid($this->aa->acl_data['comity_oid']);
	}

	private function addUrl($url) {
		if ($this->lib_rss->isRss($url)) {
			$rss = 	$this->lib_rss->fetch($url);
			switch ($this->model->addFeed($url, $rss)) {
				case 0:
				return 0;
				break;

				case 1:
				return 1; // ошибка при сохранении в бд
				break;

				case 2:
				return 2; // дубликат
			}
		} else {
			return 3; // фид не является rss лентой
		}
	}

	private function doFILESprocess($path) {

			$handle = fopen($path, "r");
			if (!$handle) return; // нет файла -- пошли нах. False

			$contents = '';
			while (!feof($handle)) {
					$contents .= fread($handle, 8192);
			}

			if (!$contents) return; // контент пуст -- пошли нах. Fasle

			$doc = new DOMDocument('1.0', 'UTF-8');

			// We don't want to bother with white spaces
			//$doc->preserveWhiteSpace = false;

			$doc->LoadHTML( $contents );
			$xpath = new DOMXPath( $doc );

			// Найдем элемент со ccылкой на platonicaid
			$query = '//outline[@xmlurl]';
			$entries = $xpath->query($query);

			$added = array();
			foreach ($entries as $entry) {
				$u = $entry->getAttribute("xmlurl");
				if ($this->addUrl($u) == 0) {
					$added[] = $u;
				}
			}
		return $added;
	}


	public function process ()
	{
		$aa = $this->aa;
		$acl_data = $aa->getInfo();
		if (!$aa->is_granted('community_edit')) return;
		if ($this->rh->FILES['opml_file']['type']=="text/xml") {
			$added = $this->doFILESprocess($this->rh->FILES['opml_file']["tmp_name"]);
		}

		// загрузить из файла xml и применить к нему поиск по xpath затем сделать для каждого найденного элемента вставку

		$view = $this->rh->views->findByName('rss_importopml');
		$view->data = $aa->template_data;
		$view->data['added'] = $added;

		$this->rh->response->setContent($view);

	} // end of function process

}

